home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 3 / Info_Mac_1994-01.iso / Development / Source / Sleep Deprivation 1.0 Source / Sleep Deprivation ƒ / sd code ƒ / sd init.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-12  |  2.4 KB  |  105 lines  |  [TEXT/KAHL]

  1. /**********************************************************************\
  2.  
  3. File:        sd init.c
  4.  
  5. Purpose:    This module handles initialization at INIT time.
  6.  
  7.  
  8. Sleep Deprivation -- graphic effects on sleep
  9. Copyright (C) 1993 Mark Pilgrim & Dave Blumenthal
  10.  
  11. This program is free software; you can redistribute it and/or modify
  12. it under the terms of the GNU General Public License as published by
  13. the Free Software Foundation; either version 2 of the License, or
  14. (at your option) any later version.
  15.  
  16. This program is distributed in the hope that it will be useful,
  17. but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. GNU General Public License for more details.
  20.  
  21. You should have received a copy of the GNU General Public License
  22. along with this program in a file named "GNU General Public License".
  23. If not, write to the Free Software Foundation, 675 Mass Ave,
  24. Cambridge, MA 02139, USA.
  25.  
  26. \**********************************************************************/
  27.  
  28. #include "sd init.h"
  29. #include "sd main.h"
  30. #include "sd environment.h"
  31. #include "notify.h"
  32. #include "Shutdown.h"
  33.  
  34. Handle            initHandle;            /* handle to main init code */
  35. THz                saveZone;
  36. SleepQRec        *theSleepPtr;
  37.     
  38. void __GetA4(void)
  39. {
  40.     asm {
  41.         bsr.s    @1
  42.         dc.l    0            ;  store A4 here
  43. @1        move.l    (sp)+,a1
  44.     }
  45. }
  46.  
  47. /* this be the init startup install routine thing */
  48. void main(void)
  49. {
  50.     RememberA0();
  51.     SetUpA4();
  52.     PrepareEnvironment();
  53.     if (!OkayEnvironmentQQ())
  54.     {
  55.         StartupError();
  56.     }
  57.     else
  58.     {
  59.         asm
  60.         {
  61.             movea.l            a4, a0
  62.             RecoverHandle
  63.             move.l            a0, initHandle
  64.         }
  65.         if (MemError())
  66.         {
  67.             StartupError();
  68.         }
  69.         else
  70.         {
  71.             HLock(initHandle);
  72.             HNoPurge(initHandle);
  73.             
  74.             DoSetup();
  75.             StartupGood();
  76.         }
  77.     }
  78.     
  79.     RestoreEnvironment();
  80.     RestoreA4();
  81. }
  82.  
  83. void DoSetup(void)
  84. {
  85.     theSleepPtr=(SleepQRec*)NewPtrSys(sizeof(SleepQRec));
  86.     theSleepPtr->sleepQLink=0;
  87.     theSleepPtr->sleepQType=slpQType;
  88.     theSleepPtr->sleepQProc=(ProcPtr)sdMain;
  89.     theSleepPtr->sleepQFlags=0;
  90.     SleepQInstall(theSleepPtr);
  91.     ShutDwnInstall((ProcPtr)&TheShutDownProc, sdOnDrivers+sdOnPowerOff);
  92. }
  93.  
  94. void TheShutDownProc(void)
  95. {
  96.     // for some reason, the system will call our sleep proc with a code "sleepDemand"
  97.     // on shutdown.  If we don't remove the sleep proc before this happens, this
  98.     // call will crash the machine with an error 41 (can't find "Finder" on disk).
  99.     // I offer no explanation, merely observation...
  100.     
  101.     SetUpA4();
  102.     SleepQRemove(theSleepPtr);
  103.     RestoreA4();
  104. }
  105.